/**
 * 
 */
package com.lemote.service;

import java.io.Serializable;
import java.util.List;

import com.lemote.core.Page;
import com.lemote.core.PropertyFilter;

/**
 * 
 * 此接口提供公共可利复用常用接口
 * @author wuhui
 *
 * 下午12:01:09
 */
public interface BaseService <T, PK extends Serializable>{

	/**
	 * 
	 * 根据ID 获取实体对象
	 * 
	 * @param id
	 * @return
	 */
	public T get(PK id);

	/**
	 * 
	 * 根据主键删除实体对象
	 * 
	 * @param id
	 */
	public void delete(PK id);

	/**
	 * 
	 * 更新实体对象
	 * 
	 * @param t
	 * @return
	 */
	public void update(T t);

	/**
	 * 
	 * 添加实体对象
	 * 
	 * @param t
	 * @return
	 */
	public void add(T t);

	/**
	 * 
	 * 分页获取实体对象
	 * 
	 * @param page
	 * @return
	 */
	public Page<T> getAll(Page<T> page);
	
	/**
	 * 获取所有实体对象
	 */
	public List<T> getAll();

	/**
	 * 
	 * 根据条件分页筛选
	 * 
	 * @param propertyFilters
	 * @return
	 */
	public Page<T> search(Page<T> page, List<PropertyFilter> filters);

	/**
	 * 
	 * 根据条件筛选
	 * @param filters
	 * @return
	 */
	public List<T> getList(List<PropertyFilter> filters);
	
	/**
	 * 根据主键批量删除
	 * @param ids
	 */
	public void delete(List<PK> ids);
	
	public T get(String propertyName,Object value);
}
